package com.yuncheng.oaApi.controller;


import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.*;


@Api(tags = "OA-请休假管理")
@RestController
@RequestMapping("/api/spzx-oa/flow-qxjgl")
public class OaQxjspFlowController {

//    /**
//     * 流程列表分页查询
//     *
//     * @param oaQxjspVo
//     * @param pageNo
//     * @param pageSize
//     * @param onlyCurrentUser
//     * @return
//     */
//    @AutoLog(value = "流程监控-分页查询")
//    @ApiOperation(value = "流程监控-分页查询")
//    @GetMapping("flowJkPage")
//    public HttpResult flowJkPage(
//            OaQxjspVo oaQxjspVo,
//            @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
//            @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
//            @RequestParam(name = "onlyCurrentUser", defaultValue = "false") boolean onlyCurrentUser) {
//        CurrentUserVo user = ThreadContextHelper.getCurrentUser();
//        if (user == null) {
//            return HttpResult.error("请重新登录，Token已失效！");
//        }
//        Page<OaQxjspVo> page = new Page<>(pageNo, pageSize);
//        oaQxjspVo.setFlcmc(oaqxjFlowConstant.getFlowName());
//        IPage<OaQxjspVo> list = oaqxjspFlowMapper.flowJkPage(page, onlyCurrentUser, user, oaQxjspVo);
//        return HttpResult.ok(list);
//    }
//
//    /**
//     * 流程列表分页查询
//     *
//     * @param oaQxjspVo
//     * @param pageNo
//     * @param pageSize
//     * @param onlyCurrentUser
//     * @return
//     */
//    @AutoLog(value = "流程列表-分页查询")
//    @ApiOperation(value = "流程列表-分页查询")
//    @GetMapping("flowJobPage")
//    public HttpResult<?> flowJobPage(
//            OaQxjspVo oaQxjspVo,
//            @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
//            @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
//            @RequestParam(name = "onlyCurrentUser", defaultValue = "true") boolean onlyCurrentUser) {
//        CurrentUserVo user = ThreadContextHelper.getCurrentUser();
//        if (user == null) {
//            return HttpResult.error("请重新登录，Token已失效！");
//        }
//        if (StringUtils.isBlank(oaQxjspVo.getFblzt())) {
//            oaQxjspVo.setFblzt(CommonFlowConstant.BLZT_DB);
//        }
//        Page<OaQxjspVo> page = new Page<>(pageNo, pageSize);
//        oaQxjspVo.setFlcmc(oaqxjFlowConstant.getFlowName());
//        IPage<OaQxjspVo> list = oaqxjspFlowMapper.flowJobPage(page, onlyCurrentUser, user, oaQxjspVo);
//        return HttpResult.ok(list);
//    }
//
//
//    /**
//     * 我的已办
//     */
//    @AutoLog(value = "流程列表-我的已办")
//    @ApiOperation(value = "流程列表-我的已办")
//    @GetMapping("myJobPage")
//    public HttpResult<?> myJobPage(
//            @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
//            @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
//            OaQxjspVo oaQxjspVo) {
//
//        CurrentUserVo user = ThreadContextHelper.getCurrentUser();
//        if (user == null) {
//            return HttpResult.error("请重新登录，Token已失效！");
//        }
//        Page<OaQxjspVo> page = new Page<>(pageNo, pageSize);
//        IPage<OaQxjspVo> list = oaqxjspFlowMapper.myYbFlowPage(page, true, user, oaQxjspVo);
//        return HttpResult.ok(list);
//    }
//
//    /**
//     * 数据修订
//     */
//    @AutoLog(value = "列表-数据修订")
//    @ApiOperation(value = "列表-数据修订")
//    @GetMapping("Pagesjxd")
//    public HttpResult<?> Pagesjxd(
//            @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
//            @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
//            OaQxjspVo oaQxjspVo) {
//
//        CurrentUserVo user = ThreadContextHelper.getCurrentUser();
//        if (user == null) {
//            return HttpResult.error("请重新登录，Token已失效！");
//        }
//        Page<OaQxjspVo> page = new Page<>(pageNo, pageSize);
//        IPage<OaQxjspVo> list = oaqxjspFlowMapper.myYbFlowPage(page, false, user, oaQxjspVo);
//        return HttpResult.ok(list);
//    }
//
//    /**
//     * @param:
//     * @Description: 更新年度信息
//     * @auther: lhb
//     * @date: 2023/9/14 17:42
//     */
//    @AutoLog(value = "更新年度信息 ")
//    @ApiOperation(value = "更新年度信息")
//    @GetMapping("myndxx")
//    public HttpResult myndxx() {
//        CurrentUserVo currentUser = ThreadContextHelper.getCurrentUser();
//        if (currentUser == null) {
//            return HttpResult.error("当前登录已失效，请重新登录");
//        }
//        Result getndxx = oaqxjFlowService.getndxx();
//        return HttpResult.ok(getndxx);
//    }
//
//    /**
//     * @param:
//     * @Description: 请假说明
//     * @auther: lhb
//     * @date: 2023/9/14 17:42
//     */
//    @AutoLog(value = "请假说明")
//    @ApiOperation(value = "请假说明")
//    @ApiImplicitParams(value = {
//            @ApiImplicitParam(name = "qxlx", value = "请假类型"),
//            @ApiImplicitParam(name = "ts", value = "天数"),
//            @ApiImplicitParam(name = "njdbj", value = "是否拿年假抵病假：是/否")
//    })
//    @GetMapping("myqxsm")
//    public HttpResult myqxsm(String qxlx,Integer ts,String njdbj) {
//        CurrentUserVo currentUser = ThreadContextHelper.getCurrentUser();
//        if (currentUser == null) {
//            return HttpResult.error("当前登录已失效，请重新登录");
//        }
//        Result qjsm = oaqxjFlowService.getqjxx(qxlx,ts,njdbj);
//        return HttpResult.ok(qjsm);
//    }
//
//
//    /**
//     * @param:
//     * @Description: 手动转结年休假
//     * @auther: lhb
//     * @date: 2023/9/15 10:53
//     */
//    @AutoLog(value = "手动转结年休假")
//    @ApiOperation(value = "手动转结年休假")
//    @GetMapping("sdzjts")
//    public HttpResult sdzjts(String userids) throws InvocationTargetException, IllegalAccessException {
//        Result getqjxx = oaqxjFlowService.zjNxj(userids);
//        if (!getqjxx.isSuccess()) {
//            getqjxx.getMessage();
//        }
//        return HttpResult.ok(getqjxx);
//    }
//
//    /**
//     * @param:
//     * @Description: 手动清零转结年休假
//     * @auther: lhb
//     * @date: 2023/9/15 10:53
//     */
//    @AutoLog(value = "手动清零转结年休假")
//    @ApiOperation(value = "手动清零转结年休假")
//    @GetMapping("sdqlzjts")
//    public HttpResult sdqlzjts(String userids) {
//        Result getqjxx = oaqxjFlowService.deletelZjnj(userids);
//        if (!getqjxx.isSuccess()) {
//            getqjxx.getMessage();
//        }
//        return HttpResult.ok(getqjxx);
//    }
//
//
//    @AutoLog(value = "发起请休假")
//    @ApiOperation(value = "发起请休假")
//    @PostMapping(value = "initBzFlow")
//    public HttpResult<?> initBzFlow(@RequestBody OaQxjsp oaQxjsp) throws ParseException {
//        String oaid = "";
//        //当前人的id
//        CurrentUserVo currentUser = ThreadContextHelper.getCurrentUser();
//        if (currentUser == null) {
//            return HttpResult.error("当前登录已失效，请重新登录");
//        }
//        if (StringUtils.isNotBlank(oaQxjsp.getId())) {
//            OaQxjsp oaids = oaQxjspService.getById(oaQxjsp.getId());
//            ConvertUtils.register(new DateConvert(), java.util.Date.class);
//            try {
//                BeanUtils.populate(oaids, BeanUtils.describe(oaQxjsp));
//            } catch (IllegalAccessException e) {
//                log.error("出错-保存事项【非法访问异常】,{}", e.getMessage());
//            } catch (InvocationTargetException e) {
//                log.error("出错-保存事项【调用TargetException】,{}", e.getMessage());
//            } catch (NoSuchMethodException e) {
//                log.error("出错-找不到可用方法", e.getMessage());
//            }
//            oaid = oaQxjsp.getId();
//
//            // Date日期单独做处理
//
//            oaQxjspService.updateById(oaids);
//        } else {
//            oaid = GetUuIdUtils.ReplaceUuId();
//
//            YcSysUser user = ycSysUserService.getById(currentUser.getId());
//            oaQxjsp.setId(oaid);
//            oaQxjsp.setFxm(currentUser.getName());
//            oaQxjsp.setFuserid(currentUser.getId());
//            oaQxjsp.setFbm(currentUser.getDeptName());
//            oaQxjsp.setFzw(user.getFzw());
//            oaQxjsp.setFlczt(CommonFlowConstant.FLOW_LCZB);
//
//            //年度信息
//
//            oaQxjspService.save(oaQxjsp);
//        }
//
//        /**
//         * @Author: lhb
//         * @Description : 是否发起流程   如果是开始申请就跳转流程
//         *               在这里设置 nextNodeName 指定下个环节节点 做当前跳转流程的判断，然后设置变量接收环节的值，写到nextNodeName中
//         * @DateTime:
//         * @Params: Fsffqlc
//         */
//        String msg = "保存成功";
//        // 初始化流程
//        Result result = oaqxjFlowService.initJob(oaid, currentUser);
//        if (!result.isSuccess()) {
//            return HttpResult.error(result.getMessage());
//        } else {
//            OaJob job = (OaJob) result.getResult();
//            if (job != null) {
//                // 是否提交流程
//                if (StringUtils.isBlank(oaid)) {
//                    return HttpResult.error("参数丢失");
//                }
//                String nextnode = "";
//                if (StringUtils.isNotBlank(oaQxjsp.getFsffqlc()) && oaQxjsp.getFsffqlc().equals("是")) {
//                    OaQxjsp byId = oaQxjspService.getById(oaQxjsp.getId());
//
//                    if (StringUtils.isBlank(byId.getFbm())){
//                        return HttpResult.error("用户部门为空，请完善个人信息部门栏");
//                    }
//                    if (StringUtils.isBlank(byId.getFlczt())) {
//                        byId.setFlczt(CommonFlowConstant.FLOW_LCZB);
//                    }
//                    String fuserid = byId.getFuserid();
//                    YcSysUser user = ycSysUserService.getById(fuserid);
//
//                    //在提交流程的时候，如果请休假类型为年休假且为流程在办的时候，则只能有一条数据
//                    boolean onenxj = oaqxjFlowService.onenxj(fuserid);
//                    if (!onenxj) {
//                        return HttpResult.error("有未办结的年休假申请，请先办结未办结的年休假申请，在申请");
//                    }
//
////                    //是否与节假日连休
////                    if (StringUtils.isBlank(user.getFsfyjjrlx()) || user.getFsfyjjrlx().equals(OaqxjFlowConstant.QXJ_NO)) {
////                        Integer fts = byId.getFts();
////                        if (fts == null) {
////                            return HttpResult.error("请假天数丢失");
////                        }
////                        Result updatelxzt = oaqxjFlowService.updatelxzt(oaid, fts);
////                        if (!updatelxzt.isSuccess()) {
////                            return HttpResult.error(updatelxzt.getMessage());
////                        }
////                    } else {
////                        return HttpResult.error("本年度已与节假日连休，不能在此时间段申请假期，如有疑问请联系人事处");
////                    }
//                    if (byId.getFqjlx().equals(OaqxjFlowConstant.QXJ_NJ) && user.getFnxjsyts() == 0) {
//                        return HttpResult.error("您本年度年假已休完，不能再申请年假，如有疑问请联系人事处！");
//                    }
//                    if (byId.getFts() > user.getFnxjsyts() && byId.getFqjlx().equals(OaqxjFlowConstant.QXJ_NJ)) {
//                        return HttpResult.error("您的请假天数大于您本年度的年假剩余天数，请修改。如有疑问请联系人事处");
//                    }
//
//                    if (byId.getFbm().contains(CommonFlowConstant.ORG_NAME_ZXFZR)) {
//                        nextnode = OaqxjFlowConstant.HJMC_DWLDSP;
//
//                    } else if (dbrService.brksfzr()) {
//                        nextnode = OaLgqsFlowConstant.HJMC_FGSP;
//                    } else {
//                        nextnode = "";
//                    }
//                    Result result1 = oaqxjFlowService.passJob(oaid, job.getId(), "同意", nextnode, "");
//                    if (!result1.isSuccess()) {
//                        return HttpResult.error(result.getMessage());
//                    }
//                    msg = "提交成功";
//                    //提交完成后 更新待办信息
//                    sysTzMessageService.tjMessage(oaid);
//                    myLcFlowService.recall(oaid);
//
//                }
//            }
//        }
//        HttpResult http = new HttpResult(true);
//        http.setMessage(msg);
//        http.setResult(oaQxjsp);
//        return http;
//    }
//
//    /**
//     * 请休假保存接口
//     */
//    @AutoLog(value = "请休假保存接口")
//    @ApiOperation(value = "请休假保存接口")
//    @PostMapping(value = "/saveFlow")
//    public HttpResult<?> saveFlow(@RequestBody OaFlowVo oaFlowVo) {
//        String submitType = CommonFlowConstant.SUBMIT_TYPE_SAVE; // 保存
//
//        String jobId = oaFlowVo.getJobid(); // 当前流程任务id
//        String oaid = oaFlowVo.getOaid(); // 当前办公主键id
//        String opinion = oaFlowVo.getOpinion(); // 办理意见
//
//        if (StringUtils.isBlank(jobId)) {
//            return HttpResult.error("流程任务id参数丢失，请联系管理员");
//        }
//        // 流程处理
//        Result httpResult = oaqxjFlowService.handleFlow(oaFlowVo, null, jobId, oaid, submitType, opinion);
//        if (!httpResult.isSuccess()) {
//            return HttpResult.error(httpResult.getMessage());
//        }
//        Map map = new HashMap();
//        HttpResult<Object> res = new HttpResult<>(true);
//        res.setMessage("保存成功");
//        res.setResult(map);
//        return res;
//    }
//
//    /**
//     * 请休假提交接口
//     */
//    @AutoLog(value = "请休假提交接口")
//    @ApiOperation(value = "请休假提交接口")
//    @PostMapping(value = "/submitFlow")
//    public HttpResult<?> submitFlow(@RequestBody OaFlowVo oaFlowVo) {
//
//        String submitType = CommonFlowConstant.SUBMIT_TYPE_SUBMIT; // 提交
//
//        String jobId = oaFlowVo.getJobid();
//        String oaid = oaFlowVo.getOaid();
//        String opinion = oaFlowVo.getOpinion();
//        OaQxjsp oaId = oaQxjspService.getById(oaid);
//        OaJob jobid = spcySqsxJobService.getById(jobId);
//
//        if (jobid.getFhjmc().equals(OaLgqsFlowConstant.HJMC_XJ)) {
//
//        } else {
//            oaId.setFlczt(CommonFlowConstant.FLOW_LCZB);
//        }
//        if (StringUtils.isBlank(oaId.getFsffqlc())) {
//            oaId.setFsffqlc("是");
//        }
//
//        oaQxjspService.updateById(oaId);
//        if (StringUtils.isBlank(oaid)) {
//            return HttpResult.error("办公主键id参数丢失，请联系管理员");
//        }
//
//        if (StringUtils.isBlank(jobId)) {
//            return HttpResult.error("流程任务id参数丢失，请联系管理员");
//        }
//        /* if (StringUtils.isBlank(opinion)){
//            return HttpResult.error("请填写办理意见");
//        }*/
//        OaJob nowJob = null;
//        Result httpResult1 = oaqxjFlowService.handleFlow(oaFlowVo, nowJob, jobId, oaid, submitType, opinion);
//        if (!httpResult1.isSuccess()) {
//            return HttpResult.error(httpResult1.getMessage());
//        }
//        //提交完成后 更新待办信息
//        sysTzMessageService.tjMessage(oaid);
//        myLcFlowService.recall(oaid);
//        return HttpResult.ok("提交成功");
//    }
//
//    /**
//     * 查询当前流程任务详情-通过当前流程任务id
//     */
//    @AutoLog(value = "查询当前流程任务详情-通过当前流程任务id")
//    @ApiOperation(value = "查询当前流程任务详情-通过当前流程任务id")
//    @ApiImplicitParam(value = "jobid", name = "流程任务id", required = true)
//    @GetMapping(value = "queryJobByJobId")
//    public HttpResult<?> queryJobByJobId(@RequestParam("jobid") String jobid) {
//        if (StringUtils.isBlank(jobid)) {
//            return HttpResult.error("流程任务id不能为空");
//        }
//        Map map = oaqxjFlowService.getJobConcernByJobId(jobid);
//        return HttpResult.ok(map);
//    }
//
//
//    /**
//     * 获取已办列表-通过当前流程id-自定义退回
//     *
//     * @param jobid
//     * @return
//     */
//    @AutoLog(value = "获取已办列表-通过当前流程id-自定义退回")
//    @ApiOperation(value = "获取已办列表-通过当前流程id-自定义退回")
//    @ApiImplicitParams(value = {
//            @ApiImplicitParam(name = "jobid", value = "流程任务id"),
//            @ApiImplicitParam(name = "isZdhj", value = "是否指定环节，默认：true，指定")
//    })
//    @GetMapping(value = "queryAllYbJob")
//    public HttpResult<?> queryAllYbJob(@RequestParam(value = "jobid", defaultValue = "") String jobid,
//                                       @RequestParam(value = "isZdhj", defaultValue = "true") boolean isZdhj) {
//        List<Map<String, String>> currentJobPrevious = oaqxjFlowService.getCurrentJobPrevious(jobid, isZdhj);
//        return HttpResult.ok(currentJobPrevious);
//    }
//
//
//    /**
//     * 通过当前流程id-退回第一步
//     *
//     * @param
//     * @return
//     */
//    @AutoLog(value = "通过当前流程id-退回第一步")
//    @ApiOperation(value = "通过当前流程id-退回第一步")
//    @ApiImplicitParams(value = {
//            @ApiImplicitParam(name = "jobid", value = "流程任务id"),
//            @ApiImplicitParam(name = "oaid", value = "业务主表id"),
//            @ApiImplicitParam(name = "opinion", value = "意见")
//    })
//    @GetMapping(value = "returnStart")
//    public HttpResult<?> returnStart(String jobid, String oaId, String opinion) {
//        Result result = oaqxjFlowService.doJobs(jobid, opinion);
//        if (!result.isSuccess()) {
//            return HttpResult.error(result.getMessage());
//        }
//        Result sqJob = oaqxjFlowService.createSqJob(jobid, oaId, opinion);
//
//        return HttpResult.ok(sqJob);
//    }
//
//    /**
//     * 退回环节
//     *
//     * @return
//     */
//    @AutoLog(value = "自定义-退回环节")
//    @ApiOperation(value = "自定义-退回环节")
//    @PostMapping(value = "returnUpperzdyFlowJob")
//    public HttpResult<?> returnUpperzdyFlowJob(@RequestBody OaReturnVo oaReturnVo) {
//        oaqxjFlowService.returnZdJob(oaReturnVo);
//        return HttpResult.ok("退回成功");
//    }
//
//
//    /**
//     * 退回上一环节流程任务
//     */
//    @AutoLog(value = "退回上一环节流程任务")
//    @ApiOperation(value = "退回上一环节流程任务")
//    @ApiImplicitParams(value = {
//            @ApiImplicitParam(name = "jobid", value = "流程任务id", required = true),
//            @ApiImplicitParam(name = "opinion", value = "意见", required = true)
//    })
//    @PostMapping(value = "returnUpperFlowJob")
//    public HttpResult<?> returnUpperFlowJob(@RequestBody Map map) {
//        String jobid = map.get("jobid").toString();
//        String opinion = map.get("opinion").toString();
//        Result result = oaqxjFlowService.getReturnUpperFlowJob(jobid, opinion);
//        if (!result.isSuccess()) {
//            return HttpResult.error(result.getMessage());
//        }
//        return HttpResult.ok("退回成功");
//    }
//
//    @AutoLog(value = "删除请休假流程")
//    @ApiOperation(value = "删除请休假流程")
//    @ApiImplicitParams(value = {
//            @ApiImplicitParam(name = "jobids", value = "流程任务id,逗号分割", required = true)
//    })
//    @DeleteMapping(value = "deleteLgqsFlowJob")
//    public HttpResult<?> deleteLgqsFlowJob(@RequestParam(value = "jobids") String jobids) {
//        if (StringUtils.isBlank(jobids)) {
//            return HttpResult.error("参数不能为空");
//        }
//        List<String> jobIdList = Arrays.asList(jobids.split(","));
//        String logNr = "";
//        Map<String, Object> map = new HashMap<>();
//        if (CollectionUtils.isNotEmpty(jobIdList)) {
//            List<OaJob> jobList = spcySqsxJobService.listByIds(jobIdList);
//            if (CollectionUtils.isNotEmpty(jobList)) {
//                for (OaJob job : jobList) {
//                    spcySqsxJobService.removeById(job.getId());
//                    OaQxjsp oaQxjsp = oaQxjspService.getById(job.getFpid());
//                    if (oaQxjsp != null) {
//                        oaQxjspService.removeById(job.getFpid());
//
//                        logNr = "删除请休假流程" + job.getFhjmc() + ": ";
//                        map = ObjectToMapUtils.objectToMap(oaQxjsp);
//                        logNr += LogUtils.MapToStringMethod(map);
//
//                        spcyLogService.addLogs(job.getFhjmc(), logNr, job.getFpid(), LogConstant.LOGS_OA_LGQS, CommonFlowConstant.LOGS_SYS_TYPE_SC);
//                    }
//                }
//            }
//        }
//
//        return HttpResult.ok("删除成功");
//    }


}
